package model.dao;

import java.util.List;

import javax.persistence.TypedQuery;

import model.basicas.AcrescimoFolhaPagamento;
import model.basicas.DecrescimoFolhaPagamento;
import model.basicas.Departamento;
import model.basicas.FolhaPagamento;
import model.basicas.Salario;
import model.interfaces.IFolhaPagamentoDAO;

public class FolhaPagamentoDAO extends GenericoDAO<FolhaPagamento> implements IFolhaPagamentoDAO {

	@Override
	public void inserir(FolhaPagamento objeto) {

		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}
		this.getEntitymanager().persist(objeto);
		this.getEntitymanager().getTransaction().commit();

	}

	@Override
	public void remover(FolhaPagamento objeto) {

		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}

		FolhaPagamento aux = consultarPorId(objeto.getIdFolha());
		if (aux != null)
		{
			this.getEntitymanager().remove(aux);
			this.getEntitymanager().getTransaction().commit();
		}

	}

	@Override
	public FolhaPagamento atualizar(FolhaPagamento objeto) {
		
		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}

		FolhaPagamento aux = consultarPorId(objeto.getIdFolha());
		if (aux != null)
		{
			this.getEntitymanager().merge(objeto);
			this.getEntitymanager().getTransaction().commit();
		}
		
		return objeto;
		

	}

	@Override
	public List<FolhaPagamento> listarCadastrados() {
		
		TypedQuery<FolhaPagamento> q = this.getEntitymanager().createQuery
				("select f from Folhapagamento f",FolhaPagamento.class);
		List<FolhaPagamento> list = q.getResultList();
		
		return list;
	}

	@Override
	public FolhaPagamento consultarPorId(long id) {
		return this.getEntitymanager().find(FolhaPagamento.class, id);
	}

	@Override
	public double calcularAcrescimo(Salario salario) {
	double valorTotalAcrescimo = 0;
		
		for (AcrescimoFolhaPagamento acrescimo : salario.getAcrescimos()) {
			valorTotalAcrescimo += acrescimo.calcularAcrescimo();
		}
		
		return valorTotalAcrescimo;
	}

	@Override
	public double calcularDecrescimo(Salario salario) {
		double valorTotalDecrescimo = 0;
		
		for (DecrescimoFolhaPagamento decrescimo : salario.getDecrescimos()) {
			valorTotalDecrescimo += decrescimo.calcularDecrescimo();
		}
		
		return valorTotalDecrescimo;
	}
	
	

}
